package de.ahus1.lottery.adapter.dropwizard.pages;
import com.gargoylesoftware.htmlunit.html.HtmlForm;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import junit.framework.AssertionFailedError;
import java.io.IOException;
import static org.assertj.core.api.Assertions.assertThat;
public class LoginPage<T> {
private final HtmlPage page;
private final Class<T> clazz;
public LoginPage(HtmlPage page, Class<T> clazz) {
this.page = page;
this.clazz = clazz;
verify();
}
private void verify() {
assertThat(page.getTitleText()).isEqualTo("Log in to test");
}
public T login(String login, String password) throws IOException, ReflectiveOperationException {
HtmlForm form =
page.getForms().stream()
.filter(f -> f.getId().equals("kc-form-login"))
.findFirst()
.orElseThrow(() -> new AssertionFailedError("unable to find keycloak form"));
form.getInputByName("username").setValueAttribute(login);
form.getInputByName("password").setValueAttribute(password);
HtmlPage afterLogin = form.getInputByName("login").click();
return (T) clazz.getConstructor(HtmlPage.class).newInstance(afterLogin);
}
}